package test;
public class CalcFunction {
        private String result;
    
        public void calc(String s){
        	if(s.indexOf("+")>-1){
        		int i=s.indexOf("+");
        		if(s.indexOf("+",i+1)==i+1){
        			throw new IllegalArgumentException("Input error! Don't like 1++1");//格式错误时抛出异常
        			}else{
        				add(s);
        				}
        		}
            if(s.indexOf("-")>-1){
                	int i=s.indexOf("-");            
                    if(s.indexOf("-",i+1)==i+1){           
                    	throw new IllegalArgumentException("Input error! Don't like 1--1");//格式错误时抛出异常
                       }else{
                    	   substract(s);
                       }
                
            }
            if(s.indexOf("*")>-1){
                	int i=s.indexOf("*");            
                    if(s.indexOf("*",i+1)==i+1){           
                    	throw new IllegalArgumentException("Input error! Don't like 1**1");//格式错误时抛出异常
                       }else{
                    	   multiply(s);
                       }     
            }
            if(s.indexOf("÷")>-1){
                	int i=s.indexOf("÷");            
                    if(s.indexOf("÷",i+1)==i+1){           
                    	throw new IllegalArgumentException("Input error! Don't like 1÷÷1");//格式错误时抛出异常
                       }else{
                    	   divide(s);
                       } 
            }
            if(s.indexOf("^")>-1){
            	int i=s.indexOf("^");
            	if(s.indexOf("^",i+1)==i+1){
            		throw new IllegalArgumentException("Input error! Don't like 1^^");//格式错误时抛出异常
            		
            	}else{
            		
            		power(s);//调用乘方
            		
            	}
            	
            	
            }
            
            if(s.indexOf("√")>-1){
            	int i=s.indexOf("√");
            	if(s.indexOf("√",i+1)==i+1){
            		throw new IllegalArgumentException("Input error! Don't like √√1");//格式错误时抛出异常
            		
            	}else{
            		sqrt(s);//调用乘方
            		
            	}
            	
            	
            }
            
            
            
            
            
            System.out.println(getResult());
        }
       
        private void sqrt(String s) {
        	String[] str=s.split("[√]");
        	int Num=Integer.parseInt(str[1]);
        	int n=1;//倍数
        	int x;
        	if(Num%4==0){
        		while(Num%4==0){
        			n=n*4;
        			Num=Num/4;
        			
        	   }
        		x=(int) Math.sqrt(n);
        		System.out.println(x+"√"+Num);
        	}if(Num%9==0){
        		
        	}else{
        		     		
        	}
        		
			
		}

		private void power(String s) {  //乘方
			String[] str=s.split("[\\^]");
			int n=Integer.parseInt(str[1]);
			if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//分数
			{  
				String[] str1=str[0].split("\\/");
				if(Integer.parseInt(str1[1]) != 0)//分母不为零
				{
					
					int Fz=Integer.parseInt(str1[0]);
					int Fm=Integer.parseInt(str1[1]);
					int FzResult=1;
					int FmResult=1;
			
					for(int i=0;i<n;i++){
						FzResult=FzResult*Fz;
						FmResult=FmResult*Fm;
					}
					result=simplefraction(FzResult,FmResult);
					
				}else{
					throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
	           }
					
		}
			 else{//整数
	     	       if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
	                {	  
	     	    	  int x=Integer.parseInt(str[0]);
	     	    	  int IntResult=(int)Math.pow(x, n);
	     	    	  result=Integer.toString(IntResult);
	     	    }        	
	            
	           else{
	        	   throw new IllegalArgumentException("overrun!");}//数值范围超出时抛出异常
	           } 
      }	
			


		public void add(String s)//加法
        {
            String[] str=s.split("[+]");
            if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//分数
            {
            	String[] str1=str[0].split("\\/");
            	String[] str2=str[1].split("\\/");
            	if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//分母不为零
            	{
            		result =simplefraction(((Integer.parseInt(str1[0])*Integer.parseInt(str2[1]))+(Integer.parseInt(str2[0])*Integer.parseInt(str1[1]))),(Integer.parseInt(str1[1])*Integer.parseInt(str2[1])));      	
            	}else{
            		throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
            	}
            }
            else{//整数
     	       if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
                {	  
     	    	   result = Integer.parseInt(str[0])+Integer.parseInt(str[1])+""; 
     	    	   }       	
            
           else{
        	   throw new IllegalArgumentException("overrun!");}//数值范围超出时抛出异常
           } 
            
        }
        
        public void substract(String s)//减法
        {
            String[] str=s.split("[-]");
            if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//分数
            {
            	String[] str1=str[0].split("\\/");
            	String[] str2=str[1].split("\\/");
            	if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//分母不为零
            	{
            		result =simplefraction(((Integer.parseInt(str1[0])*Integer.parseInt(str2[1]))-(Integer.parseInt(str2[0])*Integer.parseInt(str1[1]))),(Integer.parseInt(str1[1])*Integer.parseInt(str2[1])));    	
            	}else{
            		throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
            	}
            }
            else{//整数
           if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
                {
        	   result = Integer.parseInt(str[0])-Integer.parseInt(str[1])+"";
        	   }       	
            
           else{
        	   throw new IllegalArgumentException("overrun!");}//数值范围超出时抛出异常
           }
        }
        
        
        public void multiply(String s)//乘法
        {
            String[] str=s.split("[*]");
            if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//分数
            {
            	String[] str1=str[0].split("\\/");
            	String[] str2=str[1].split("\\/");
            	if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//
            	{
                	result =simplefraction(Integer.parseInt(str1[0])*Integer.parseInt(str2[0]),Integer.parseInt(str1[1])*Integer.parseInt(str2[1]));  
            	}else{
            		throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
            	}
      
            }
            else{//整数
         	       if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
                    {	            result = Integer.parseInt(str[0])*Integer.parseInt(str[1])+"";   }       	
                
               else{
            	   throw new IllegalArgumentException("overrun!");}//数值范围超出时抛出异常
            	
            	}
        }
        
        
        public void divide(String s)//除法
        {
            String[] str=s.split("[÷]");
            
            if(str[0].indexOf("\\/")>-1 || str[1].indexOf("/")>-1)//分数
            {
            	String[] str1=str[0].split("\\/");
            	String[] str2=str[1].split("\\/");
            	if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//分母不为零
            	{
                	result =simplefraction(Integer.parseInt(str1[0])*Integer.parseInt(str2[1]),Integer.parseInt(str1[1])*Integer.parseInt(str2[0]));  	
            	}else{
            		throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
            	}
      
            }else{
            	if(Integer.parseInt(str[1]) != 0){//整数
             	       if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
                        {	            
             	    	   result = Integer.parseInt(str[0])/Integer.parseInt(str[1])+"";
                        }       	
                    
                   else{
                	   throw new IllegalArgumentException("overrun!");}
                             		
            	}else {
            		
            		throw new IllegalArgumentException("Divisor cannot be zero!");   //除数为零时抛出异常  	
            	}
            }
        }
    
    public String getResult()
    {
        return result;
    } 
        
    
    public static int GCD(int m, int n) {//递归法求最大公约数
        if(m % n == 0){
            return n;
        }else{
            while(m != n){
                if(m > n)m = m - n;
                else n = n - m;
            }
        }
        return m;
}
    public static int LCM(int m, int n){//求最小公倍数
        return m * n / GCD(m,n);
    }
    
    static String simplefraction(int m, int n){ //化简分数
    String s;
    int num = GCD(m, n);
            m = m / num;
            n = n / num;
    if (n == 1) {
        s = m + "";
    } else {
        s = m + "" + "/" + n + "";
    }
    return s;
}
    
}